package game.Russian;

import java.util.Arrays;

public class TetrisBase extends Matrix{

	public final static int row=14;
	public final static int column=10;

	public TetrisBase() {
		super(row,column);

	}

	//清除满行
	public void clearRow() {

		int[] base=new int[column];
		Arrays.fill(base,Matrix.GrapVal);
		for(int i=0;i<row;i++) {
			if(Arrays.equals(this.get()[i], base)) {
				rowDown(i);
			}
		}
	}

	//清除满行后，其余数据下移
	private void rowDown(int row) {
		for(int i=row;i>=0;i--) {
			if(i>0) {
				get()[i]=Arrays.copyOf(get()[i-1], column);
			}else {
				get()[i]=new int[column];
			}
		}
	}

	/**
	 *
	 * @param addBlock
	 * @param rowIndex
	 * @param columnIndex
	 * @return
	 */
	public Matrix add(TetrisBlock addBlock,int rowIndex,int columnIndex) {
		if(addBlock==null) return this;
		Matrix newMatr=this.clone();

		int[][] added=addBlock.get();//相加的目标矩阵
		for(int i=0;i<added.length;i++) {
			for(int j=0;j<added[i].length;j++) {
				int addRow=i+rowIndex;//计算基础矩阵相加的行位置
				int addColumn=j+columnIndex;//计算基础矩阵相加的列位置
				//如果相加的位置越界，不进行计算
				if(addRow>=0 && addRow<row
						&& addColumn>=0
						&& addColumn<column){

					newMatr.get()[addRow][addColumn]=
							get()[addRow][addColumn]+
									added[i][j];
				}else {
					//如果越界，并且偏移的数组数据为1，返回原始矩阵
					if(added[i][j]!=0) return this;
				}
			}
		}

		return newMatr;
	}
}
